package com.btech.dftp.dataimport;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.quincy.rock.core.util.ConvertUtil;

/**
 * <b>DataUtils。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * <p><b>修改列表：</b></p>
 * <table width="100%" cellSpacing=1 cellPadding=3 border=1>
 * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr>
 * <!-- 在此添加修改列表，参考第一行内容 -->
 * <tr><td>1</td><td>wks</td><td>2022年4月22日 下午2:29:25</td><td>建立类型</td></tr>
 * 
 * </table>
 * @version 1.0
 * @author wks
 * @since 1.0
 */
public abstract class DataUtils {

	/**
	 * <b>toDataType。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param type
	 * @return
	 */
	public static DataType toDataType(String type) {
		if (StringUtils.isNotBlank(type)) {
			type = type.trim().toUpperCase();
			for (DataType v : DataType.values()) {
				if (v.name().startsWith(type))
					return v;
			}
		}
		return DataType.UNKNOW;
	}

	/**
	 * <b>获得单元格的值。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 
	 * @param cell 单元格
	 * @param type 返回的数据类型
	 * @return 单元格的值
	 */
	public static Object getCellValue(Cell cell, DataType type) {
		Object value = null;
		if (cell != null) {
			CellType cellType = cell.getCellType();
			if (cellType == CellType.FORMULA)
				cellType = cell.getCachedFormulaResultType();
			switch (cellType) {
			case STRING:
				value = cell.getStringCellValue();
				break;
			case BOOLEAN:
				value = cell.getBooleanCellValue();
				break;
			case NUMERIC:
				if (type == DataType.DATE || type == DataType.TIME || type == DataType.DATETIME)
					value = cell.getDateCellValue();
				else
					value = cell.getNumericCellValue();
				break;
			case BLANK:
				break;
			default:
				value = cell.toString();
				break;
			}
			//类型转换
			switch (type) {
			case STRING:
				value = ConvertUtil.obj2String(value);
				break;
			case BOOLEAN:
				value = ConvertUtil.obj2Boolean(value);
				break;
			case INTEGER:
				value = ConvertUtil.obj2Integer(value);
				break;
			case LONG:
				value = ConvertUtil.obj2Long(value);
				break;
			case NUMERIC:
			case DOUBLE:
				value = ConvertUtil.obj2Double(value);
				break;
			case DATE:
				value = ConvertUtil.obj2Date(value);
				break;
			case TIME:
				value = ConvertUtil.obj2Time(value);
				break;
			case DATETIME:
				value = ConvertUtil.obj2DateTime(value);
				break;
			default:
				break;
			}
		}
		//
		return value;
	}
}
